package LeetCode_232;

import java.util.*;

class MyQueue1 {
    // stack1 是放元素的
    private final Deque<Integer> stack1 = new LinkedList<>();
    // stack2 是取元素的
    private final Deque<Integer> stack2 = new LinkedList<>();

    public MyQueue1() {

    }

    public void push(int x) {
        stack1.push(x);
    }

    public int pop() {
        if (empty()) {
            return -1;
        }

        if (stack2.isEmpty()) {
            // 先把 stack1 的所有元素倒过来
            while (!stack1.isEmpty()) {
                // 说明 stack1 里还有元素
                int e = stack1.pop();
                stack2.push(e);
            }
        }

        // 断言: stack2.isEmpty() == false
        // 无论是刚倒过来的还是之前就剩下的
        return stack2.pop();
    }

    public int peek() {
        if (empty()) {
            return -1;
        }

        if (stack2.isEmpty()) {
            // 先把 stack1 的所有元素倒过来
            while (!stack1.isEmpty()) {
                // 说明 stack1 里还有元素
                int e = stack1.pop();
                stack2.push(e);
            }
        }

        // 断言: stack2.isEmpty() == false
        // 无论是刚倒过来的还是之前就剩下的
        return stack2.peek();
    }

    public boolean empty() {
        return stack1.isEmpty() && stack2.isEmpty();
    }

    public static void main(String[] args) {
        MyQueue1 queue = new MyQueue1();
        queue.push(1);
        queue.push(2);
        queue.push(3);
        System.out.println(queue.peek());   // 1
        queue.push(4);
        queue.push(5);
        System.out.println(queue.peek());   // 1
        queue.push(6);
        queue.push(7);
        System.out.println(queue.pop());    // 1
        System.out.println(queue.pop());    // 2
        queue.push(8);
        System.out.println(queue.pop());    // 3
        System.out.println(queue.pop());    // 4
        System.out.println(queue.pop());    // 5
    }
}
